package array;

import java.util.Arrays;

public class ArrayCopying {
    public static void main(String[] args) {
        int[] original = {1, 2, 3, 4, 5};

        // 方法1：使用Arrays.copyOf()
        int[] copy1 = Arrays.copyOf(original, original.length);
        System.out.println("copy1: " + Arrays.toString(copy1));

        // 可以指定新数组长度
        int[] copy2 = Arrays.copyOf(original, 3); // 只复制前3个元素
        System.out.println("copy2（前3个元素）: " + Arrays.toString(copy2));

        // 方法2：使用Arrays.copyOfRange()
        int[] copy3 = Arrays.copyOfRange(original, 1, 4); // 复制索引1到3（不包括4）
        System.out.println("copy3（索引1-3）: " + Arrays.toString(copy3));

        // 方法3：使用System.arraycopy()
        int[] copy4 = new int[original.length];
        // 参数：源数组，源起始索引，目标数组，目标起始索引，复制长度
        System.arraycopy(original, 0, copy4, 0, original.length);
        System.out.println("copy4: " + Arrays.toString(copy4));

        // 方法4：手动复制（循环）
        int[] copy5 = new int[original.length];
        for (int i = 0; i < original.length; i++) {
            copy5[i] = original[i];
        }
        System.out.println("copy5: " + Arrays.toString(copy5));

        // 修改原数组，查看复制数组是否受影响（数组复制是值复制）
        original[0] = 100;
        System.out.println("\n修改原数组后:");
        System.out.println("原数组: " + Arrays.toString(original));
        System.out.println("copy1: " + Arrays.toString(copy1)); // 不受影响
    }
}
